home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_87 / sounddev.inc < prev    next >
Text File  |  1995-01-01  |  10KB  |  469 lines

  1.                 IDEAL
  2.                 MODEL  TPascal
  3.                 LOCALS @@
  4.  
  5.                 P286
  6.  
  7. StackSize EQU 500
  8.  
  9. EXTRN DevStack         : BYTE
  10. EXTRN DevSS            : WORD
  11. EXTRN DevSP            : WORD
  12.  
  13. EXTRN DoGetBuffer      : FAR
  14.  
  15. EXTRN CSOldInt8        : FAR
  16.  
  17. EXTRN Sounding         : DWORD
  18. EXTRN SoundLeft        : WORD
  19.  
  20. EXTRN SystemClockIncr  : WORD
  21. EXTRN SystemClockCount : WORD
  22.  
  23. EXTRN PeriodicCount    : WORD
  24. EXTRN PeriodicStart    : WORD
  25. EXTRN PeriodicProc     : DWORD
  26.  
  27. EXTRN DeviceIdling     : BYTE
  28.  
  29. EXTRN NumChannels      : BYTE
  30. EXTRN ChannelIncr      : BYTE
  31.  
  32. EXTRN DoEqualice       : BYTE
  33.  
  34.  
  35. ;*******************************************
  36.  
  37. MACRO Chunk1
  38.                 CLI
  39.  
  40.                 PUSH    AX
  41.                 PUSH    DS
  42.  
  43.                 MOV     AX,SEG Sounding
  44.                 MOV     DS,AX
  45.  
  46.                 MOV     [DevSS],SS
  47.                 MOV     [DevSP],SP
  48.                 MOV     SS,AX
  49.                 MOV     SP,OFFSET DevStack + StackSize
  50.  
  51.                 PUSH    DX
  52.                 PUSH    CX
  53.                 PUSH    BX
  54.                 PUSH    ES
  55.  
  56. ENDM Chunk1
  57.  
  58. ;*******************************************
  59.  
  60. ; DeviceRut1
  61.  
  62. ;*******************************************
  63.  
  64. MACRO Chunk21
  65.  
  66.                 MOV     AX,[SoundLeft]
  67.                 AND     AX,AX
  68.                 JNZ     @@yeah
  69.  
  70.                 PUSH    DI
  71.                 PUSH    SI
  72.                 CALL    DoGetBuffer
  73.                 POP     SI
  74.                 POP     DI
  75.  
  76.                 AND     AX,AX
  77.                 JNZ     @@yeah
  78.  
  79.                 INC     AH
  80.                 MOV     [DeviceIdling],AH
  81.  
  82. ENDM Chunk21
  83.  
  84. ;-------------------------------------------
  85.  
  86. ; DeviceRutFail
  87.  
  88. ;-------------------------------------------
  89.  
  90. MACRO Chunk221
  91.  
  92.                 JMP     SystemIntEntry
  93.  
  94. @@yeah:         DEC     AX
  95.                 MOV     [SoundLeft],AX
  96.  
  97. ENDM Chunk221
  98.  
  99. ;-------------------------------------------
  100.  
  101. ; DeviceRut1
  102.  
  103. ;-------------------------------------------
  104.  
  105. MACRO Chunk222
  106.  
  107.                 XOR     BH,BH
  108.                 MOV     [DeviceIdling],BH
  109.  
  110.                 LES     BX,[Sounding]
  111.  
  112. ENDM Chunk222
  113.  
  114. ;-------------------------------------------
  115.  
  116. MACRO Chunk22
  117.  
  118.                 Chunk221
  119.                 Chunk222
  120.  
  121. ENDM Chunk22
  122.  
  123. ;-------------------------------------------
  124.  
  125. MACRO Chunk2
  126.  
  127.                 Chunk21
  128.                 Chunk22
  129.  
  130. ENDM Chunk2
  131.  
  132. ;*******************************************
  133.  
  134. MACRO ChunkMix
  135.  
  136.                 MOV     CX,[ES:BX]
  137.                 ADD     CX,[ES:BX+6]
  138.                 ADD     CX,[ES:BX+8]
  139.                 ADD     CX,[ES:BX+14]
  140.                 ADD     CX,[ES:BX+16]
  141.                 ADD     CX,[ES:BX+22]
  142.                 ADD     CX,[ES:BX+24]
  143.                 ADD     CX,[ES:BX+30]
  144.  
  145.                 MOV     AX,[ES:BX+2]
  146.                 ADD     AX,[ES:BX+4]
  147.                 ADD     AX,[ES:BX+10]
  148.                 ADD     AX,[ES:BX+12]
  149.                 ADD     AX,[ES:BX+18]
  150.                 ADD     AX,[ES:BX+20]
  151.                 ADD     AX,[ES:BX+26]
  152.                 ADD     AX,[ES:BX+28]
  153.  
  154. ENDM  ChunkMix
  155.  
  156. ;-------------------------------------------
  157.  
  158. MACRO MonoChunk31
  159.  
  160.                 ChunkMix
  161.  
  162.                 ADD     AX,CX
  163.                 JNO     @@nooverf
  164.                 JS      SHORT @@posit
  165.                  MOV    AX,-32768
  166.                 JMP     SHORT @@nooverf
  167. @@posit:         MOV    AX,32767
  168. @@nooverf:
  169.  
  170.         MOV     DL,[DoEqualice]
  171.         AND     DL,DL
  172.         JNZ     @@equal
  173.         JMP     @@noequal
  174. @@equal:
  175.         PUSH    BX
  176.  
  177.         PUSH    AX
  178.  
  179.         CWD
  180.  
  181.         MOV     BX,0FFFFh
  182. @@Data11:
  183.         MOV     CX,0FFFFh
  184. @@Data12:
  185.  
  186.         SAR     CX,1
  187.         RCR     BX,1
  188.         SAR     CX,1
  189.         RCR     BX,1
  190.         SUB     AX,BX
  191.         SBB     DX,CX
  192.  
  193.         SAR     CX,1
  194.         RCR     BX,1
  195.         SUB     AX,BX
  196.         SBB     DX,CX
  197.  
  198.         MOV     [WORD PTR CS:@@Data11-2],AX
  199.         MOV     [WORD PTR CS:@@Data12-2],DX
  200.  
  201.         MOV     BX,AX
  202.         MOV     CX,DX
  203.  
  204.         POP     AX
  205.  
  206.         PUSH    BX
  207.         PUSH    CX
  208.  
  209.         CWD
  210.  
  211.         MOV     BX,0FFFFh
  212. @@Data21:
  213.         MOV     CX,0FFFFh
  214. @@Data22:
  215.  
  216.         SAR     CX,1
  217.         RCR     BX,1
  218.         ADD     AX,BX
  219.         ADC     DX,CX
  220.  
  221.         SAR     CX,1
  222.         RCR     BX,1
  223.         ADD     AX,BX
  224.         ADC     DX,CX
  225.  
  226.         SAR     CX,1
  227.         RCR     BX,1
  228.         SAR     CX,1
  229.         RCR     BX,1
  230.         ADD     AX,BX
  231.         ADC     DX,CX
  232.  
  233.         MOV     [WORD PTR CS:@@Data21-2],AX
  234.         MOV     [WORD PTR CS:@@Data22-2],DX
  235.  
  236.         POP     CX
  237.         POP     BX
  238.  
  239.         SUB     AX,BX
  240.         SBB     DX,CX
  241.         SUB     AX,BX
  242.         SBB     DX,CX
  243.  
  244.         SAR     DX,1
  245.         RCR     AX,1
  246.  
  247.         CMP     DX,0
  248.         JG      @@up
  249.         JNE     @@neg
  250.         CMP     AX,32768
  251.         JC      @@nada
  252. @@up:    MOV    AX,32767
  253.          JMP    @@nada
  254. @@neg:  CMP     DX,-1
  255.         JNZ     @@dw
  256.         CMP     AX,32768
  257.         JNC     @@nada
  258. @@dw:    MOV    AX,-32768
  259. @@nada:
  260.  
  261.         POP     BX
  262.  
  263. @@noequal:
  264.  
  265.  
  266.  
  267.                 XOR     AH,80h
  268.                 MOV     CL,AH
  269.  
  270. ENDM MonoChunk31
  271.  
  272. ;-------------------------------------------
  273.  
  274. MACRO SterChunk31
  275.  
  276.                 ChunkMix
  277.  
  278.                 ADD     CX,CX
  279.                 JNO     @@nooverf1
  280.                 JS      SHORT @@posit1
  281.                  MOV    CX,-32768
  282.                 JMP     SHORT @@nooverf1
  283. @@posit1:        MOV    CX,32767
  284. @@nooverf1:
  285.                 ADD     AX,AX
  286.                 JNO     @@nooverf2
  287.                 JS      SHORT @@posit2
  288.                  MOV    AX,-32768
  289.                 JMP     SHORT @@nooverf2
  290. @@posit2:        MOV    AX,32767
  291. @@nooverf2:
  292.                 MOV     CL,AH
  293.                 XOR     CX,8080h
  294.  
  295. ENDM SterChunk31
  296.  
  297. ;-------------------------------------------
  298.  
  299. MACRO StMixChunk31
  300.  
  301.                 ChunkMix
  302.  
  303.                 MOV     DX,AX
  304.                 ADD     AX,CX
  305.                 JNO     @@nooverf0
  306.                  RCR    AX,1
  307.                 JMP     SHORT @@ovc0
  308. @@nooverf0:      SAR    AX,1
  309. @@ovc0:
  310.                 ADD     CX,AX
  311.                 JNO     @@nooverf1
  312.                 JS      SHORT @@posit1
  313.                  MOV    CX,-32768
  314.                 JMP     SHORT @@nooverf1
  315. @@posit1:        MOV    CX,32767
  316. @@nooverf1:
  317.                 ADD     DX,AX
  318.                 JNO     @@nooverf2
  319.                 JS      SHORT @@posit2
  320.                  MOV    DX,-32768
  321.                 JMP     SHORT @@nooverf2
  322. @@posit2:        MOV    DX,32767
  323. @@nooverf2:
  324.                 MOV     CL,DH
  325.                 XOR     CX,8080h
  326.  
  327. ENDM StMixChunk31
  328.  
  329. ;-------------------------------------------
  330.  
  331. MACRO StMix2Chunk31
  332.  
  333.                 ChunkMix
  334.  
  335.                 SAR     CX,1
  336.                 SAR     AX,1
  337.                 MOV     DX,AX
  338.                 ADD     AX,CX
  339.  
  340.                 MOV     [WORD PTR CS:@@datastm2-2],AX
  341.                 SAR     AX,1
  342.                 ADD     AX,1234
  343. @@datastm2:
  344.                 JNO     @@nooverf1
  345.                 JS      SHORT @@posit1
  346.                  MOV    AX,-32768
  347.                 JMP     SHORT @@nooverf1
  348. @@posit1:        MOV    AX,32767
  349. @@nooverf1:
  350.                 ADD     DX,AX
  351.                 JNO     @@nooverf2
  352.                 JS      SHORT @@posit2
  353.                  MOV    DX,-32768
  354.                 JMP     SHORT @@nooverf2
  355. @@posit2:        MOV    DX,32767
  356. @@nooverf2:
  357.                 ADD     CX,AX
  358.                 JNO     @@nooverf3
  359.                 JS      SHORT @@posit3
  360.                  MOV    CX,-32768
  361.                 JMP     SHORT @@nooverf3
  362. @@posit3:        MOV    CX,32767
  363. @@nooverf3:
  364.                 MOV     CL,DH
  365.                 XOR     CX,8080h
  366.  
  367. ENDM StMix2Chunk31
  368.  
  369. ;===========================================
  370.  
  371. MACRO MonoChunk32
  372.  
  373.                 MOV     CL,[ES:BX]
  374.                 XOR     CL,80h
  375.  
  376. ENDM MonoChunk32
  377.  
  378. ;-------------------------------------------
  379.  
  380. MACRO SterChunk32
  381.  
  382.                 MOV     CL,[ES:BX]
  383.                 XOR     CL,80h
  384.                 MOV     CH,CL
  385.  
  386. ENDM SterChunk32
  387.  
  388. ;*******************************************
  389.  
  390. MACRO Chunk41 Size
  391.  
  392.                 ADD     BX,16*2
  393.                 MOV     [WORD PTR Sounding],BX
  394.  
  395. ENDM Chunk31
  396.  
  397. ;-------------------------------------------
  398.  
  399. MACRO Chunk42
  400.  
  401.                 INC     BX
  402.                 MOV     [WORD PTR Sounding],BX
  403.  
  404. ENDM Chunk42
  405.  
  406. ;*******************************************
  407.  
  408. ; DeviceRut2
  409.  
  410. ;*******************************************
  411.  
  412. MACRO Chunk51
  413.                 JMP     SystemIntEntry
  414. ENDM Chunk51
  415.  
  416. ;-------------------------------------------
  417.  
  418. MACRO Chunk5
  419.  
  420. SystemIntEntry:
  421.                 POP     ES
  422.                 POP     BX
  423.                 POP     CX
  424.                 POP     DX
  425.  
  426.                 MOV     SS,[DevSS]
  427.                 MOV     SP,[DevSP]
  428.  
  429.                 DEC     [PeriodicCount]
  430.                 JNZ     @@NoSystemClock
  431.  
  432.                 MOV     AX,[PeriodicStart]
  433.                 MOV     [PeriodicCount],AX
  434.  
  435.                 MOV     AX,[SystemClockIncr]
  436.                 ADD     [SystemClockCount],AX
  437.                 JNC     @@nosys
  438.  
  439.                 PUSHF
  440.                 CALL    FAR CSOldInt8
  441.                 JMP     @@sisys
  442.  
  443. @@nosys:        MOV     AL,20h
  444.                 OUT     20h,AL
  445.  
  446. @@sisys:        PUSHA
  447.                 PUSH    ES
  448.  
  449.                 STI
  450.  
  451.                 CALL    [PeriodicProc]
  452.  
  453.                 POP     ES
  454.                 POPA
  455.  
  456.                 JMP     @@Fin
  457.  
  458. @@NoSystemClock:
  459.                 MOV     AL,20h
  460.                 OUT     20h,AL
  461.  
  462. @@Fin:
  463.                 POP     DS
  464.                 POP     AX
  465.                 IRET
  466.  
  467. ENDM Chunk5
  468.  
  469.